package pers.qianyu.month_202012.date_20201227;

import java.util.*;

/**
 * 205. 同构字符串
 * https://leetcode-cn.com/problems/isomorphic-strings/
 *
 * @author mizzle rain
 * @date 2020-12-27 14:53
 */
public class IsIsomorphic {
    /**
     * 这里记录一个错误的思路：
     * - 使用两个变量 p1 p2 初始值为 0 ，遍历字符串 s 和字符串 t ，
     * 如果字符串中某个字符与前一个字符不同的话就更新 p1 或 p2 ，
     * 然后判断 p1 和 p2 是否相等，不相等就直接返回 false
     * - 反例：abc  aba
     */
    public boolean isIsomorphic(String s, String t) {
        int len1 = s.length();
        int len2 = t.length();
        if (len1 != len2) {
            return false;
        }
        if (len1 == 0) {
            return true;
        }
        HashMap<Character, Character> s2t = new HashMap<>();
        HashMap<Character, Character> t2s = new HashMap<>();
        for (int i = 0; i < len1; i++) {
            char x = s.charAt(i);
            char y = t.charAt(i);
            if (s2t.containsKey(x) && s2t.get(x) != y ||
                    t2s.containsKey(y) && t2s.get(y) != x) {
                return false;
            }
            s2t.put(x, y);
            t2s.put(y, x);
        }
        return true;
    }
}
